package com.mr.modle;

import com.mr.service.FreshThread;
import com.mr.service.Sound;

import javax.imageio.ImageIO;
import java.awt.Rectangle;//矩形边界类
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

//haimianbb类
public class haimianbb {
    public BufferedImage image;//主图片   Image是一个抽象类，BufferImage是其实现类，是一个带缓冲区图像类，可以方便操纵图片
    private BufferedImage image1;//跑步图片
    public int x, y;//坐标
    private int jumpValue = 0;//跳跃的增变量
    private boolean jumpState = false;//跳跃状态：初始化为停止
    private int stepTimer = 0;//踏步计时器
    private final int JUMP_HIGHT = 100;//跳起最大高度
    private final int LOWEST_Y = 320;//落地最低坐标 越低越高 坐标系在最上面
    private final int FREASH = FreshThread.FREASH;//刷新时间

    public haimianbb(){
        x =50;
        y =LOWEST_Y;

        try{
            image1 = ImageIO.read(new File("image/海绵宝宝.jpg"));
            }catch(IOException e){
                e.printStackTrace();
            }
    }//try catch 处理异常 有异常就用catch  e.printStackTrace()的意思是：在命令行打印异常信息在程序中出错的位置及其原因
//踏步
   private void step(){
        //每过250毫秒,更换一张图片.
        int tmp = stepTimer / 250;
        switch(tmp){
            case 1:
                image = image1;
                break;
        }
        stepTimer += FREASH;//计时器递增
    }//try catch 用来处理异常语句 
//跳跃
    public void jump(){
        if (!jumpState){//如果没有处于跳跃状态
            Sound.jump();//播放跳跃音乐
        }
        jumpState = true;//处于跳跃状态
    }
//移动
    public void move(){
        step();//不断踏步
        if (jumpState){//如果正在跳跃
            if (y>=LOWEST_Y){//如果纵坐标大于等于最低点
                jumpValue = -4;//增变量为负值，向上跳
            }
            if (y<=LOWEST_Y- JUMP_HIGHT){//如果跳过最高点
                jumpValue = 4;//增变量为正值，向下跳
            }
            y+=jumpValue;//纵坐标发生变化
            if (y>=LOWEST_Y){//如果再次落地
                jumpState = false;//停止跳跃
            }
        }
    }
	//创建矩形边界对象，用于做头部测试
    public Rectangle getFootBounds(){//获取恐龙脚部边界对象
        return new Rectangle(x + 30,y+59,29,18);
    }
    public Rectangle getHeadBounds(){//获取恐龙头部边界对象
        return new Rectangle(x + 66,y+25,32,22);
    }
}